#include <bits/stdc++.h>
using namespace std;
struct Circle {
  int center, radius, left, right;
  // left right 抽象出一个选段
} circles[100005];

stack<int> circleStack; // 使用 STL 中的 stack

bool compare(Circle a, Circle b) {
  if (a.right != b.right) // 按照右端点排序
    return a.right < b.right;
  else // 右端点相同的话，半径小的排前面
    return a.radius < b.radius;
}

int main() {
  // freopen(".in","r",stdin);
  // freopen(".in","w",stdout);
  int n, totalLength;
  cin >> n;
  int answer = n + 1;

  for (int i = 1; i <= n; i++) {
    cin >> circles[i].center >> circles[i].radius;
    circles[i].left = circles[i].center - circles[i].radius;
    circles[i].right = circles[i].center + circles[i].radius;
  }
  sort(circles + 1, circles + n + 1, compare);

  for (int i = 1; i <= n; i++) {
    if (circleStack.empty() ||
        circles[i].left >= circles[circleStack.top()].right) {
      circleStack.push(i); // 当前圆在栈顶圆的右侧就入栈
      totalLength = 0;
      continue; // 俩圆没有包含关系
    }
    while (!circleStack.empty() &&
           circles[circleStack.top()].left >= circles[i].left &&
           circles[circleStack.top()].right <= circles[i].right) {
      totalLength += circles[circleStack.top()].radius * 2;
      circleStack.pop();
    }
    if (totalLength == circles[i].radius * 2) {
      answer++; // 如果弹掉的圆完全分割了当前圆，答案加1
    }
    totalLength = 0;
    circleStack.push(i); // 将当前圆入栈
  }
  cout << answer;
  return 0;
}